
AI Agent 很會做事,但「很會做事」不代表「每次都做對事」。 筆者這次要介紹 GitHub Copilot Hooks,讓 Agent 在特定執行時間點, 自動呼叫 Batch、PowerShell、Python 或其他 Shell command,幫忙檢查結果、留下紀錄, 甚至在失敗時通知或啟動下一個 Agent。簡單講,就是幫 AI 裝上一個驗收人員啊 🤖
🎯 為什麼使用 Hooks?
筆者在使用 AI Agent 時,最怕遇到的不是它不會做,而是它「看起來做完了」。 尤其當使用比較便宜的模型時,筆者原本以為只要在結尾交代需求,它會乖乖執行,結果還是選擇性遺忘啊 😅
所以筆者一直強調,在 AI 時代不能只靠 Prompt,還是要有自己的驗證機制。 Prompt 是請 AI 做事,Hook 則是可以用來確認它到底有沒有產出結果。
🪝 GitHub Copilot Hooks 到底是什麼?
Hooks 可以理解成 Agent 執行流程中的「事件掛勾」。 當 Agent 走到某個時間點,就自動執行筆者預先設定好的 command。 不用每次手動輸入,也不用祈禱 AI 記得做驗證,系統會照規則跑下去。

用一個 JSON 檔案定義事件與指令, 然後在指定的時機呼叫 PowerShell。當然,實務上也可以搭配 Bash、 Python、CMD 等方式,依照團隊環境選擇即可。

🧠 一句話理解 Hooks
Agent 負責執行任務; Hook 負責在關鍵節點補刀、驗收與記錄。
📌 常見 Hook 事件
sessionStart:工作階段開始時,初始化環境或建立紀錄。
sessionEnd:工作階段結束時,清理暫存檔或輸出報告。
preToolUse:Agent 使用工具前,先做權限、參數或政策檢查。
postToolUse:工具執行後,確認輸出是否符合預期。
userPromptSubmitted:使用者送出需求時,記錄或補充上下文。
Stop:Agent 或子 Agent 停止時,執行收尾邏輯。
errorOccurred:發生錯誤時,留下紀錄或觸發通知。
筆者覺得最實用的,通常是 Stop 完成之後的驗證。 例如 Agent 說自己已經寫好程式碼,Hook 就去檢查指定檔案是否真的存在、 是否能通過基本測試,甚至確認必要的輸出是否產生。
如果檢查失敗,筆者還可以讓 Hook 通知自己,或再呼叫另一個 Agent, 例如 Claude Code、Codex,繼續補完後續工作。這樣就不會變成: Agent 說「完成」,筆者說「蛤?檔案在哪裡?」的日常悲劇。![]()
🛠️ 用 JSON 定義執行規則
Hooks 的設定核心是 JSON。筆者可以在裡面指定 Hook 要監聽的事件、 要執行的 command、使用哪一種 Shell,以及工作目錄、環境變數和 timeout 等設定。
以下是一個概念示意,實際欄位名稱與版本仍要以目前使用的 GitHub Copilot 文件為準。
{
"version": 1,
"hooks": {
"postToolUse": [
{
"type": "command",
"command": "powershell -ExecutionPolicy Bypass -File .\scripts\validate-output.ps1",
"timeoutSec": 10
}
]
}
}
🔍 筆者會讓 Hook 檢查什麼?
指定的程式碼檔案是否真的產生。
JSON、設定檔或輸出檔案格式是否正確。
單元測試、Lint 或基本編譯是否通過。
Agent 是否漏掉必要步驟。
錯誤發生時,是否需要通知筆者或啟動下一個自動化流程。
更多實作細節,請參考完整版影片囉
🧪 筆者整理的幾個實務眉角
Hook 要輕量:能快速完成就不要塞一大串長時間工作,必要時改成背景執行。
設定 timeout:避免某個腳本卡住,整個 Agent 流程跟著陪葬。
不要記錄機密:Token、密碼、連線字串等敏感資訊,千萬不要直接寫進 Hook。
安全提醒: Hook 本質上會執行本機命令,因此權限與輸入處理非常重要。
🚀 本日結論:小功能,解決大痛點
筆者認為 GitHub Copilot Hooks 最有價值的地方,不是多了一個酷炫功能, 而是它補上了 Agent 工作流程裡很重要的一塊:可控性。
AI 會產生不確定的結果,這件事短期內不會消失。 我們能做的不是一直對 Prompt 補全,而是建立驗證、記錄與失敗處理機制。 讓 Agent 做事,讓 Hook 去呼叫驗收程序,兩邊各司其職,流程才比較有機會穩定下來。![]()